﻿#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H

#include <QGraphicsScene>
#include "GraphicsRect/graphicsrectitem.h"
#include <QGraphicsSceneMouseEvent>
#include <QMessageBox>
#include "debugTool.h"

class GraphicsScene : public QGraphicsScene
{
    Q_OBJECT

public:
    GraphicsScene();

    /*
     * @brief   创建一个裁剪窗矩形。
     *          在上次点击时选中了背景，且此时没有裁剪窗矩形的情况下，鼠标左键背景时调用。
     * @param   aleft：矩形左侧边界的位置
     *          atop：矩形上侧边界的位置
     *          awidth：矩形的宽
     *          aheight：矩形的高
     * @retval  无*/
    void creatRect(int aleft=0,int atop=0,int awidth=100,int aheight=100);

    /*
     * @brief   将一张图片与view的宽高传入GraphicsScene对象，并调用resetBackGroundIamge()
     * @param   pix：传入的图片
     *          width：QGraphicsView的宽
     *          height：QGraphicsView的高
     * @retval  无*/
    void SetBackGroundImage(QPixmap pix, int width, int height);

    /*
     * @brief   清空裁剪窗矩形后，根据view的宽高计算图片的缩放比例，显示图片。
     * @param   无
     * @retval  无*/
    void resetBackGroundIamge();

    /*
     * @brief   将裁剪框矩形框出的内容放大铺满view。
     *          右键裁剪框矩形时调用。
     * @param   rect：裁剪框矩形的QRect。
     * @retval  无*/
    void setTailorImage(QRect rect);

    /*
     * @brief   取消裁剪。
     *          在裁剪框矩形已经存在的情况下，可清除裁剪框矩阵。
     *          在调用setTailorImage()裁剪放大后，可清除裁剪放大状态。
     *          右键裁剪框矩形以外的地方时调用。
     * @param   无
     * @retval  无*/
    void cancelTailorImage();


private:

    /*
     * @brief   设置鼠标形状。
     * @param   cursor：包含鼠标形状信息的鼠标类。
     * @retval  无*/
    void setCursor(const QCursor & cursor );
//    void keyPressEvent(QKeyEvent *event);
    //---------------------鼠标事件------------------------
    void mousePressEvent(QGraphicsSceneMouseEvent *event);
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);

    GraphicsRectItem *m_RectItem = nullptr; //存放裁剪框矩形对象
    QRect m_tailorRect = QRect(0,0,0,0);    //存放裁剪形状
    QPixmap m_pix;                          //存放背景图片
    int viewWidth,viewHeight;               //背景图片的宽高
    qreal m_scale;                          //背景图片的缩放比例
};

#endif // GRAPHICSSCENE_H
